草庐IT

Linux IO重定向和管道

全部标签

c# - 在windows/.net中创建管道文件

我正在使用一个旧程序生成它的输出到一个文件中。我可以在命令行上指定要使用的文件,但它必须转到一个文件(没有发送到stdout的选项)。我想在输出生成时流式传输(不要等到文件完成)。在*nix中,我会创建一个命名管道,并使用该"file"作为输出。这个(或类似的东西)可以在Windows中完成吗?可以用纯C#或仅用c/c++/pInvoke完成吗?有没有可以跨平台的库? 最佳答案 从您的.Net应用程序,您可以将遗留应用程序生成为Process,您可以为此定义其standardoutputstream。.您可以使用文件流或任何其他类型

c# - 为什么重定向标准输入会导致 stdout 不打印到新的控制台进程?

所以我试图运行一个单独的程序,使用Process.Start().程序会偶尔暂停,等待输入。我希望能够通过标准输入向此进程发送信息。我试图理解使用Windows操作系统外壳创建新进程与重定向标准输入的影响之间的区别。ExeUseShellRedirectSTDINWINDOWDisplaysOutputDisplayscmd.exe/cprogramYNYYNNYYNYYNprogram.exeYNYYNNYYNYYN重要的信息是,如果我重定向标准输入,那么屏幕上不会显示任何数据。为什么会这样?通常program.exe应该写入其stdout文件描述符。我假设Process.Start

c++ - 在 Windows 上重定向标准输出/标准错误

我有一个WindowsGUI应用程序,它使用第三方库将调试/错误信息打印到stdout/stderr。我找到了许多将它们重定向到我的日志文件的解决方案。但是4个中只有1.5个按预期工作。我在WinXPSP332位上使用VS2008SP1。我没有包括错误处理,但没有调用返回错误。//Firstone:SetStdHandle(STD_OUTPUT_HANDLE,(HANDLE)_get_osfhandle(_fileno(log_file.get_FILE())));SetStdHandle(STD_ERROR_HANDLE,(HANDLE)_get_osfhandle(_fileno(

windows - 为什么某些 cmd 启动的进程在重定向输出时会阻止/缓冲输出?

为什么某些进程在我的Windows机器上的命令行中启动,如果重定向,则阻止/缓冲它们的整个输出,而其他进程则没有?示例:tracert不会在写入时阻止/缓冲输出。如果执行:tracertponyoverflow.com>output.txt...output.txt文件随时间增长。这完全是我期望事情表现的方式。但是,我正在尝试使用潜在供应商的软件产品(iSpringSDK,如果您必须知道的话),它似乎会缓冲完整的输出,直到该过程完成。让我感到困惑的是,当这个软件在命令行运行时,输出会像预期的那样零碎地、逐行地出现。为什么调用它时使用和不使用输出重定向在行为上存在差异?跟进杂项问题:这在

python - 重定向现有的 Windows 资源管理器实例

我有一个程序现在可以打开很多文件夹,我希望我可以使用已经打开的资源管理器实例来打开新的文件夹。我有这段代码:importsubprocesssubprocess.Popen(r'explorer/select,"C:\path\of\folder\file"')我已经看到有关在C#中执行此操作的线程。有谁知道可以用Python完成的方法吗?谢谢,本 最佳答案 我不相信你能做到这一点。如果有任何希望,您可能需要查看Pythonfor.Net,您可以尝试一下IronPython。但是上面使用subprocess的代码只是给你相同的结果,

windows - Windows 上两个网络套接字之间的管道数据

给定两个网络套接字,在不以任何方式接触内容的情况下将数据从一个传输到另一个的最有效方法是什么?有没有一种方法(系统调用API)可以在内核空间中管理套接字到套接字的数据管道,类似于spliceprovidesonLinux?这就是我目前在Haskell中使用splice的方式:UsingGNU/Linuxsystemcall`splice`forzero-copySockettoSocketdatatransfersinHaskell. 最佳答案 Windows上的零拷贝API称为TransmitFile。它读取一个文件句柄并写入一个

c++ - 如何在 Windows 中重定向 std::cout 和 printf

我已经根据这篇文章创建了程序CreatingaChildProcesswithRedirectedInputandOutput,但它对std::cout和printf不起作用,所以从这样的程序中我得到了一个“你好,妈妈”字符串,而cout和printf部分没有任何结果:int_tmain(intargc,_TCHAR*argv[]){HANDLEhStdOut=GetStdHandle(STD_OUTPUT_HANDLE);constchar*buffer="Hello,momma";std::cout问:我如何拦截cout和printf?我无权访问子程序的源代码,我只需要拦截它的输出

Windows cmd 将子命令输出重定向到文件

我正在尝试使用cuda-memcheck调试应用程序。我想要做的是将我的应用程序的输出重定向到一个文件,但另一方面,将cuda-memcheck的stdout和stderr重定向到另一个文件。但我无法让它工作。这:cuda-memcheck"app.exe>stdout1.txt">memcheck.log2>&1什么都不做。但是,如果我删除引号内的重定向(忽略我的应用程序输出),它就会执行。所以问题是,如何重定向子命令的标准输出? 最佳答案 根据您对cuda-memcheck行为的评论,您可以使用以下命令。cuda-memchec

windows - 如何使用管道(ffmpeg + imagemagick)构建视频缩略图表?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎与helpcenter中定义的范围内的编程无关。.关闭6年前。Improvethisquestion如何在不使用临时文件的情况下使用管道(ffmpeg+imagemagick)在Windows上构建视频缩略图表?

c# - node js中的Windows命名管道(首选共享内存)

我正在使用命名管道在Windows中的2个进程之间共享一些数据。一个是Node进程,另一个是C#进程。这是我在我的Node进程中使用的代码示例:varnet=require('net');varPIPE_NAME="mypipe";varPIPE_PATH="\\\\.\\pipe\\"+PIPE_NAME;varL=console.log;varserver=net.createServer(function(stream){L('Server:onconnection')stream.on('data',function(c){L('Server:ondata:',c.toStri